package com.xl.juc.collection.unsafe;

import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;

/**
 * 报错：ava.util.ConcurrentModificationException 并发修改异常！
 * @author Charley
 * @create 2020-12-27
 */
public class ListTest {
    public static void main(String[] args) {
        //并发下ArrayList不安全
        /**
         * 解决方案
         * 1. List<String> list = new Vector<>();
         * 2.List<String> list = Collections.synchronizedList(new ArrayList<>());
         * 3.juc: List<String> list = new CopyOnWriteArrayList<>();
         */
        //CopyOnWrite 写入时复制 相比Vector synchronizedList，效率高，其他的都有synchronized锁，而CopyOnWriteArrayList使用的是ReentrantLock锁
        List<String> list = new CopyOnWriteArrayList<>();
        for (int i = 1; i <100 ; i++) {
            new Thread(()->{
                list.add(UUID.randomUUID().toString().substring(0,5));
                System.out.println(list);
            },String.valueOf(i)).start();
        }
    }
}
